import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:分支结构
 * User: liangyuanzhang
 * Date: 2024-11-27
 * Time: 23:24
 */
public class Work {
    //二进制1的个数   n&(n-1)
    public static void main(String[] args) {
        int n = 7;
        int count = 0;
        while (n != 0){
            n = n&(n-1);
            count++;
        }
        System.out.println(count);
    }
    //求最大公约数
    public static void main11(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        int c = a % b;
        while(c != 0){
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println("最大公约为:"+b);
    }
    //X形图案
    public static void main10(String[] args) {
        Scanner in = new Scanner(System.in);
        //多组输入
        while(in.hasNextInt()){
            int a = in.nextInt();
            for (int i = 0;i<a;i++){
                for(int j = 0;j<a;j++){
                    if(i == j || i+j == (a-1)){
                        System.out.print("*");
                    }else {
                        System.out.print(" ");
                    }
                }
                System.out.println();
            }
        }
    }
    //猜数字游戏
    public static void main9(String[] args) {
        //默认随机种子是系统时间
        Random random = new Random();
        Scanner scanner = new Scanner(System.in);
        //生成100以内的随机数
        int toGuess = random.nextInt(100);
        while (true){
            System.out.println("请输入1-100内的数字");
            int tmp = scanner.nextInt();
            if(tmp < toGuess){
                System.out.println("猜小了");
            }else if(tmp > toGuess){
                System.out.println("猜大了");
            }else{
                System.out.println("猜对了，数字是"+tmp);
            }
        }
    }
    public static void main8(String[] args) {
        double x = 2.0;
        int y = 4;
        x /= ++y;// x = x / ++y;
        System.out.println(x);
    }
    //二进制1的个数
    public static void main7(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int count = 0;
        for (int i = 0; i < 32; i++) {
            if(((n>>>i) & 1) == 1) {
                count++;
            }
        }
        System.out.println(count);
    }
    //求2个整数的最大公约数(辗转相除法)
    public static void main6(String[] args) {
        int a = 20;
        int b = 40;
        int c = a % b;
        while(c != 0){
            a = b;
            b = c;
            c = a % b;
        }
        System.out.println(b);
    }
    //计算分数的值
    /*
     该表达式主要由100项，基数项为正，偶数项为负
     设置一个循环从1~100项，奇数项为正，偶数项为负
     使用flg控制奇偶项，奇数为正，偶数为负
     最后将所有的项相加
     */
    public static void main5(String[] args) {
        double sum = 0;
        int flg = 1;
        for (int i = 1; i <= 100; i++) {
            sum += 1.0/i * flg;
            flg = -flg;
        }
        System.out.println(sum);
    }
    //水仙花数
    /*
    1. 求取data是几位数
    2. 获取data中每个位置上的数据，并对其进行立方求和
    3. 对data中每个位上的数据立方求和完成后，在检测其结果是否与data相等即可，
    相等：则为水仙花数
    否则：不是
     */
    public static void main4(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i <= n ; i++) {
            int count = 1;
            int tmp = i;
            int sum = 0;
            //判断i是否为水仙花数
            //1. 求判断数字的位数
            while(tmp/10 != 0)
            {
                count++;
                tmp = tmp/10;
            }
            //2. 计算每一位的次方和
            tmp = i;
            while(tmp != 0)
            {
                sum += Math.pow(tmp%10, count);
                tmp = tmp/10;
            }
            //3. 判断
            if(sum == i)
                System.out.println(i);
        }
    }
    //打印 X 图形
    public static void main3(String[] args) {
        //创建一个Scanner对象，用于从标准输入（控制台）读取用户输入的数据
        Scanner scan = new Scanner(System.in);

        //实现多组输入
        while(scan.hasNextInt()) {
            //从输入流中读取一个整数，并将其赋值给变量n
            int n = scan.nextInt();

            //外层循环控制行数，从0开始，每次递增1，直到小于n为止，即会执行n行操作
            for(int i = 0;i < n;i++) {
                //内层循环控制每行的列数
                for(int j = 0;j < n;j++) {
                    //判断当前位置是否在主对角线上
                    if(i == j) {
                        //如果在主对角线上，输出一个*
                        System.out.print("*");
                        //判断当前位置是否在副对角线上
                    }else if( i+j+1 == n) {
                        //如果在副对角线上，也输出一个*
                        System.out.print("*");
                    }else{//即不在主对角线，也不再副对角线，则输出空格
                        System.out.print(" ");
                    }
                }
                //每行的*打印完之后换到下一个行
                System.out.println();
            }
        }
    }
    //判定素数
    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int i;
        for ( i = 2; i < n; i++) {
            if(n % i ==0){
                System.out.println(n+"不是素数");
                break;
            }
        }
        if( i >= n){
            System.out.println(n+"是素数");
        }
    }
    //数字9出现的次数
    public static void main1(String[] args) {
        int count = 0;
        //产生1/100的数字
        for (int i = 1; i <= 100 ; i++) {
            //判断个位的9
            if(i % 10 == 9){
                count++;
            }
            //判断十位的9
            if(i / 10 ==9){
                count++;
            }
        }
        System.out.println(count);
    }
}
